﻿using System;
using System.Runtime.Serialization;

namespace NCMIS.ObjectModel.MetaData
{
    /// <summary>
    /// Identifies a specific allowable action, used to map a permission.
    /// </summary>
    [DataContract(Namespace = CmisNs.Cmis)]
    public enum AllowableActionsKey
    {
        [EnumMember(Value = "canGetDescendents.Folder")]
        CanGetDescendentsFolder,

        [EnumMember(Value = "canGetChildren.Folder")]
        CanGetChildrenFolder,

        [EnumMember(Value = "canGetParents.Folder")]
        CanGetParentsFolder,

        [EnumMember(Value = "canGetFolderParent.Object")]
        CanGetFolderParentObject,

        [EnumMember(Value = "canCreateDocument.Type")]
        CanCreateDocumentType,

        [EnumMember(Value = "canCreateDocument.Folder")]
        CanCreateDocumentFolder,

        [EnumMember(Value = "canCreateFolder.Type")]
        CanCreateFolderType,

        [EnumMember(Value = "canCreateFolder.Folder")]
        CanCreateFolderFolder,

        [EnumMember(Value = "canCreateRelationship.Type")]
        CanCreateRelationshipType,

        [EnumMember(Value = "canCreateRelationship.Source")]
        CanCreateRelationshipSource,

        [EnumMember(Value = "canCreateRelationship.Target")]
        CanCreateRelationshipTarget,

        [EnumMember(Value = "canCreatePolicy.Type")]
        CanCreatePolicyType,

        [EnumMember(Value = "canGetProperties.Object")]
        CanGetPropertiesObject,

        [EnumMember(Value = "canViewContent.Object")]
        CanViewContentObject,

        [EnumMember(Value = "canUpdateProperties.Object")]
        CanUpdatePropertiesObject,

        [EnumMember(Value = "canMove.Object")]
        CanMoveObject,

        [EnumMember(Value = "canMove.Target")]
        CanMoveTarget,

        [EnumMember(Value = "canMove.Source")]
        CanMoveSource,

        [EnumMember(Value = "canDelete.Object")]
        CanDeleteObject,

        [EnumMember(Value = "canDeleteTree.Folder")]
        CanDeleteTreeFolder,

        [EnumMember(Value = "canSetContent.Document")]
        CanSetContentDocument,

        [EnumMember(Value = "canDeleteContent.Document")]
        CanDeleteContentDocument,

        [EnumMember(Value = "canAddToFolder.Object")]
        CanAddToFolderObject,

        [EnumMember(Value = "canAddToFolder.Folder")]
        CanAddToFolderFolder,

        [EnumMember(Value = "canRemoveFromFolder.Object")]
        CanRemoveFromFolderObject,

        [EnumMember(Value = "canRemoveFromFolder.Folder")]
        CanRemoveFromFolderFolder,

        [EnumMember(Value = "canCheckout.Document")]
        CanCheckoutDocument,

        [EnumMember(Value = "canCancelCheckout.Document")]
        CanCancelCheckoutDocument,

        [EnumMember(Value = "canCheckin.Document")]
        CanCheckinDocument,

        [EnumMember(Value = "canGetAllVersions.VersionSeries")]
        CanGetAllVersionsVersionSeries,

        [EnumMember(Value = "canGetObjectRelationships.Object")]
        CanGetObjectRelationshipsObject,

        [EnumMember(Value = "canAddPolicy.Object")]
        CanAddPolicyObject,

        [EnumMember(Value = "canAddPolicy.Policy")]
        CanAddPolicyPolicy,

        [EnumMember(Value = "canRemovePolicy.Object")]
        CanRemovePolicyObject,

        [EnumMember(Value = "canRemovePolicy.Policy")]
        CanRemovePolicyPolicy,

        [EnumMember(Value = "canGetAppliedPolicies.Object")]
        CanGetAppliedPoliciesObject,

        [EnumMember(Value = "canGetACL.Object")]
        CanGetACLObject,

        [EnumMember(Value = "canApplyACL.Object")]
        CanApplyACLObject,
    }
}
